import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import 'font-awesome/css/font-awesome.css'
import installElementPlus from './plugins/element'
import { initMenu } from '@/utils/menus'
import { getRequest } from '@/utils/api'
import 'default-passive-events'
const app = createApp(App)
/**
 * 路由守卫
 * 每次跳转时检测是否有token，如果有token，则加载用户对应的路由列表，存入vuex。
 * 如果本地没有user信息，则请求后台，获取用户信息，用于右上角展示。
 */
router.beforeEach((to, from, next) => {
  // 用户已经登录的情况
  if (window.sessionStorage.getItem('tokenStr')) {
    // 如果vuex中的routes长度为0，则需要初始化路由
    if (store.state.routes.length === 0) {
      initMenu(router, store).then(res => {
        if (res) {
          // 没有user信息，先获取user信息，再跳转
          if (!window.sessionStorage.getItem('user')) {
            return getRequest('/admin/info').then(res => {
              if (res) {
                // 获取用户信息，保存到vuex
                store.commit('setUserInfo', res)
                next({ ...to, replace: true })
              }
            })
          } else {
            // 有user信息的情况，直接跳转
            next({ ...to, replace: true })
          }
        }
      })
    } else {
      // vuex中的路由长度不为0，则只是普通跳转，没有刷新页面，直接next
      next()
    }
  } else {
    // else未登录情况，分为跳转登录页和跳往特定路径
    if (to.path === '/') {
      next()
    } else {
      next('/?redirect=' + to.path)
    }
  }
})
installElementPlus(app)
app
  .use(store)
  .use(router)
  .mount('#app')
